package main

import (
	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
	"log"
	"net/http"
	"strings"
)

// Body dump 中间件通常在调试 / 记录的情况下被使用，它可以捕获请求并调用已注册的处理程序 (handler) 响应有效负载。
// 然而，当您的请求 / 响应有效负载很大时（例如上传 / 下载文件）需避免使用它；但如果避免不了，可在 skipper 函数中为端点添加异常。
func main() {
	e := echo.New()

	//使用一
	//e.Use(middleware.BodyDump(func(c echo.Context, receives []byte, response []byte) {
	//	log.Println("receives:", string(receives))
	//	log.Println("response:", string(response))
	//}))

	//使用二： 自定义 BodyDumpConfig(推荐)
	e.Use(middleware.BodyDumpWithConfig(CustomBodyDumpConfig()))

	e.GET("/index", Index)
	e.GET("/body", Body)

	e.Start(":80")
}

// CustomBodyDumpConfig
//
//	@Description:
//	@return middleware.BodyDumpConfig
func CustomBodyDumpConfig() middleware.BodyDumpConfig {
	b := middleware.BodyDumpConfig{
		Skipper: func(c echo.Context) bool {
			uri := c.Request().RequestURI
			if strings.Contains(uri, "/index") {
				log.Println("uri:", uri, "--->>>Skipper-true")
				return true
			}
			log.Println("uri:", uri, "--->>>Skipper-false")
			return false
		},
		Handler: func(c echo.Context, request []byte, response []byte) {
			log.Println("requestLength:", len(request))
			log.Println("responseLength:", len(response))
		},
	}
	return b

}

func Index(c echo.Context) error {
	return c.String(http.StatusOK, "index success!")
}

func Body(c echo.Context) error {
	return c.String(http.StatusOK, "auth success!")
}
